/*
 * util.h
 *
 *  Created on: May 6, 2009
 *      Author: gianpaolo
 */

#ifndef UTIL_H_
#define UTIL_H_

#include <list>

using namespace std;

/*
 * Funcion que busca un elemento en el arreglo
 * @param:
 * 		tablero -> representacion del tablero
 * @return
 * 		Entero que representa la posicion o -1 sino
 * 		lo encuentra
 */
int buscarElem(unsigned long* tablero, int elem);

/*
 * Funcion usada para asociar un ranking a un estado.
 * @params:
 * 	rank -> el ranking a asociar
 * 	size -> tamano del arreglo permutado
 * @returns
 * 	El String listo para imprimir en consola
 */
char* unrank(unsigned long rank, short int size, unsigned long fact);

/*
 * Calcula el factorial de un numero n
 */
unsigned long fact(int n);

/*
 * Devuelve un entero correspondiente a la posicion fil,col
 * de la representacion del tablero como matriz (zero based)
 * @params:
 * 		tablero -> representacion en long del tablero
 * 		fil -> fila
 * 		col -> col
 * @return: el entero en esa posicion
 */
short int getElem(unsigned long tablero, int fil, int col);

/*
 * Devuelve un entero correspondiente a la posicion en un arreglo
 * de la representacion del tablero (zero based)
 * @params:
 * 		tablero -> representacion en long del tablero
 * 		pos -> cifra a extraer
 * @return: el entero en esa posicion
 */
short int getElem(unsigned long tablero, int pos);

/*
 * Funcion de elevar x a la potencia y devolviendo un
 * unsigned long
 */
unsigned long powU(int x, int y);

/*
 * Funcion para cambiar una cifra por otra
 * @param:
 * 		tablero -> apuntador al long a modificar
 * 		x -> posicion del primer elemento (zero based)
 * 		y -> posicion del segundo elemento (zero based)
 */
void change(unsigned long *tablero, int x, int y);

#endif /* UTIL_H_ */

